# -*- coding: utf-8 -*-

class CRC16(object):

    def __init__(self):
        pass

    def crc16(self,string):
        '''
        一般发送命令都是'01030000000A'这样的字符串
        输入：test2 = '01030000000A'
        输出：0xc5cd
        hexstr[2:].upper()  去掉
        '''
        data = bytearray.fromhex(string)
        crc = 0xFFFF
        for pos in data:
            crc ^= pos
            for i in range(8):
                if ((crc & 1) != 0):
                    crc >>= 1
                    crc ^= 0xA001
                else:
                    crc >>= 1       
        return hex(((crc & 0xff) << 8) + (crc >> 8))[2:].upper()

    def crcCheck(self,string):
        ''' 
        @@@不接受字节流数据@@@@@@ test3 = b'\x01\x03\x00\x00\x00\x0A\xC5\xCD' 
        确认输入的是 类似格式test1 = '01030000000AC5CD'
        去掉一个串的后四位 string[:-4]
        crc运算结果与后四位比较 string[-4:]
        '''
        if len(string) > 4 :
            if self.crc16(string[:-4]) == string[-4:] :
                return True
            else:
                return False
            print(string)
        else:
            return False

        
# if __name__ == "__main__":

#     test1 = '01030000000AC5CD'
#     test2 = '01030000000A'
#     test3 = b'\x01\x03\x00\x00\x00\x0A\xC5\xCD'
#     test4 = b'\x01\x03\x00\x00\x00\x0A'

#     crc16=CRC16()

#     crcvalue = crc16.crcCheck(test1)

#     print (crcvalue)

